package edu.uoc.tdp.pac4.server.connexiomanteniment.db;

import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.Date;

import edu.uoc.tdp.pac4.server.connexiomanteniment.exceptions.*;
import edu.uoc.tdp.pac4.connexiomanteniment.Administrador;
import edu.uoc.tdp.pac4.connexiomanteniment.ResponsableEvents;
import edu.uoc.tdp.pac4.connexiomanteniment.Usuari;


public class GestorResponsableEvents extends Gestor {
	public GestorResponsableEvents() {}
	
	public ResponsableEvents getResponsableEvents(String login) throws ExceptionServer {
	 	Statement st = null; ResultSet rs = null; ResponsableEvents r = null;
		connect();
		try {
			String query = "SELECT idintern, tipususuari, idusuari, pwd, email, estatensistema, tipusdocumentid, document, nom, cognom1, cognom2, dataalta, usuarialta, databaixa, usuaribaixa, datamod, usuarimod " 
					+        "FROM usuari, responsableevents WHERE idintern = idresponsable AND idusuari = '" + login + "'";
			st = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
		 	rs = st.executeQuery(query);
		 	// hem suposat que el login es tambe identificador, es a dir no hi ha mes d'un usuari amb el mateix login
	 		if (rs.next()) {
	 			r = new ResponsableEvents(rs.getString("tipusdocumentid"),rs.getString("document"),rs.getString("nom"),rs.getString("cognom1"),rs.getString("cognom2"),rs.getString("idusuari"),rs.getString("pwd"),rs.getString("email"));
	 			r.setIdIntern(rs.getInt("idintern"));
	 			r.setEstatEnSistema(rs.getString("estatensistema").charAt(0));
	 			r.setDataCreacio(rs.getDate("dataalta"));
	 			r.setDataModificacio(rs.getDate("datamod"));
	 			r.setDataEsborrat(rs.getDate("databaixa"));
	 			r.setTipusUsuari(Usuari.TIPUS_USUARI_RESPONSABLEEVENTS);   // tambe el podem treure de bdd, el tenim en el result set, pero ha de ser aquest, altrament les dades serien inconsistents
	 			// no informo quin administrador ha fet les operacions, perque de fet en la pantalla de connexio i manteniment aixo no apareix mai
	 		} else throw new ExceptionServer(ExceptionServer.SERVER_DB_USER_NOT_EXIST);   // usuari no existent o no es administrador
		} catch (SQLException e) { ManageSQLException(e); } 
		finally { try { rs.close(); st.close(); disconnect(); } catch(Exception e) { throw new ExceptionServer(ExceptionServer.SERVER_DB_UNEXPECTED_ERROR); } }
		return r;
	}	
	
	public void updateResponsableEvents(ResponsableEvents r) throws ExceptionServer {
		r.setDataModificacio(new Date()); GestorUsuari gu = new GestorUsuari(); gu._updateusuari(r);		
	}
	
	public int insertResponsableEvents(ResponsableEvents r) throws ExceptionServer {
		r.setDataCreacio(new Date()); GestorUsuari gu = new GestorUsuari(); 
		int internalId = gu._insertusuari(r);
		// i ara falta insertar aquest internal id en la taula responsableevents
		connect();
		String insert = "INSERT INTO responsableevents(idresponsable) VALUES(?)";
    	PreparedStatement st = null;
    	try {
	    	st = connection.prepareStatement(insert,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
	 		st.setInt(1,internalId);
	 		st.execute();
		} catch (SQLException e) { ManageSQLException(e); } 
    	finally { disconnect(); }		
		return internalId;
	}
		
	public void deleteResponsableEvents(ResponsableEvents r) throws ExceptionServer {
		r.setDataEsborrat(new Date()); r.setEstatEnSistema(Usuari.ESTAT_EN_SISTEMA_INACTIU); updateResponsableEvents(r);
	}
}
	
